package com.example.bounce;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.OverScroller;

import androidx.annotation.Nullable;

public class ScrollerBounceView extends View {

    private float mDownX = 0;
    private float mDonwY = 0;
    private Paint mPaint;

    private OverScroller mScroller;

    public ScrollerBounceView(Context context) {
        super(context);
        init(context);
    }

    public ScrollerBounceView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public ScrollerBounceView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

//    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
//    public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
//        super(context, attrs, defStyleAttr, defStyleRes);
//        init(context);
//    }

    private void init(Context mContext) {
        mPaint = new Paint();
        mPaint.setTextSize(80);

        mScroller = new OverScroller(mContext, new AccelerateDecelerateInterpolator());
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawText("我是中国人！", 0, 100, mPaint);
    }

    int mLastY;

    @Override
    public boolean onTouchEvent(MotionEvent event) {
//        float x = event.getX();
//        float y = event.getY();
//        switch (event.getAction()){
//            case MotionEvent.ACTION_DOWN:
//                //标志着第一个手指按下
//                mDownX = x;//获取按下时x坐标值
//                mDonwY = y;//获取按下时y坐标值
//                break;
//            case MotionEvent.ACTION_MOVE:
//                //按住一点手指开始移动
//                float move_x = mDownX - x;//计算当前已经移动的x轴方向的距离
//                float move_y = mDonwY - y;//计算当前已经移动的y轴方向的距离
//                float oldScollX = getScrollX();//计算之前已经偏移的x轴方向的距离
//                float oldScollY  = getScrollY();//计算之前已经偏移的y轴方向的距离
//
//                //开始滚动动画
//                //第一个参数：x轴开始位置
//                //第二个参数：y轴开始位置
//                //第三个参数：x轴偏移量
//                //第四个参数：y轴偏移量
////                mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), (int) move_x, (int) move_y, 60);
//                mScroller.startScroll(getScrollX(), getScrollY(), -getScrollX(), -getScrollY(), 1000);
//                invalidate();//目的是重绘view，是的执行computeScroll方法
//
//                break;
//
//        }
//        return true;

        int x = (int) event.getRawX();
        int y = (int) event.getRawY();
        int action = event.getAction();
        int dy = 0;
        switch (action) {
            case MotionEvent.ACTION_DOWN:
//                isClick = true;
                mLastY = y;
                if (!mScroller.isFinished()) { // 如果上次的调用没有执行完就取消。
                    mScroller.abortAnimation();
                }
                return true;
            case MotionEvent.ACTION_MOVE:
                // 移动的距离
                dy = y - mLastY;
                mLastY = y;
                // 滑动
                scrollBy(0, -dy);
                return true;
            case MotionEvent.ACTION_UP:
                mScroller.startScroll(getScrollX(), getScrollY(), -getScrollX(), -getScrollY(), (int) (200 + (0.5 * Math.abs(getScrollY()))));
                invalidate();
                return true;
        }
        return false;
    }

    @Override
    public void computeScroll() {
        super.computeScroll();
        if (mScroller.computeScrollOffset()) {//判断滚动是否完成，true说明滚动尚未完成，false说明滚动已经完成
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());//将view直接移动到当前滚动的位置
            invalidate();//触发view重绘
        }
    }
}
